package com.txby.start;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.jck.tools.easyui.DateUtils;

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class})
//,MongoAutoConfiguration.class, MongoDataAutoConfiguration.class
@EnableCaching
@EnableTransactionManagement
// 启用AOP注解特性
@EnableAspectJAutoProxy
@ComponentScan(basePackages = { "com.jck.mybatis"
		, "com.txby.hisJob.component", "com.txby.hisJob.config",
		"com.txby.platformCore.component.service", "com.txby.platformCore.component.util"
		
		,"com.txby.shopCore.component.service"
		, "com.txby.shopWeb.component.service", "com.txby.shopWeb.component.web"
		,"com.txby.shopGoods.component.service"	,"com.txby.shopGoods.component.web"    
		,"com.txby.shopOrders.component.service"	,"com.txby.shopOrders.component.web"    
		,"com.txby.shopPromotion.component.service"	,"com.txby.shopPromotion.component.web"  

})
public class Application extends WebMvcConfigurerAdapter {

	@Bean
	public HttpMessageConverters fastJsonHttpMessageConverters() {
		// 1、需要先定义一个 convert 转换消息的对象;
		FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
		// 2、添加fastJson 的配置信息，比如：是否要格式化返回的json数据;
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		fastJsonConfig.setDateFormat(DateUtils.YYYYMMDDHHMMSS_19);
		// 3、在convert中添加配置信息.
		fastConverter.setFastJsonConfig(fastJsonConfig);
		HttpMessageConverter<?> converter = fastConverter;
		return new HttpMessageConverters(converter);
	}

	@Override
	public void configurePathMatch(PathMatchConfigurer configurer) {
		configurer.setUseSuffixPatternMatch(false).setUseTrailingSlashMatch(true);
		super.configurePathMatch(configurer);

	}

	@Bean(name = "multipartResolver")
	public CommonsMultipartResolver multipartResolver() {
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
		return multipartResolver;
	}

	
	 @Bean
     public CusApplicationRunner startupRunner(){
         return new CusApplicationRunner();
     }


	/*
	 * @Bean public ServletRegistrationBean
	 * dispatcherRegistration(DispatcherServlet dispatcherServlet) {
	 * ServletRegistrationBean reg = new
	 * ServletRegistrationBean(dispatcherServlet); reg.getUrlMappings().clear();
	 * reg.addUrlMappings("*.html"); reg.addUrlMappings("*.do"); return reg; }
	 */
	public static void main(String[] args) {
		SpringApplication springApplication = new SpringApplication(Application.class);
		springApplication.addListeners(new ApplicationStartup());
		springApplication.run(args);
		// SpringApplication.run(Application.class, args);
	}

}
